// import { useUserStore } from "@/store/modules/user";
import cache from "@/utils/cache";
import axios from "axios";
import { ElMessage } from "element-plus";
import { ElMessageBox } from "element-plus/es";
import qs from "qs";

const baseURL = `${import.meta.env.MODE === "development" ? "http://220.196.89.86:9173" : window.location.protocol + "//" + window.location.host}/JGBStandardWebApi/`;
// axios实例
const service = axios.create({
  baseURL: baseURL,
  // baseURL: 'http://220.196.89.86:9173/JGBStandardWebApi',
  timeout: 60000,
  headers: { "Content-Type": "application/json;charset=UTF-8" },
});

// 请求拦截器
service.interceptors.request.use(
  (config: any) => {
    // const userStore = useUserStore();

    // if (userStore?.token) {
    //   config.headers.Authorization = userStore.token;
    // }

    config.headers["Accept-Language"] = cache.getLanguage();

    // 追加时间戳，防止GET请求缓存
    if (config.method?.toUpperCase() === "GET") {
      config.params = { ...config.params, t: new Date().getTime() };
    }

    if (Object.values(config.headers).includes("application/x-www-form-urlencoded")) {
      config.data = qs.stringify(config.data);
    }

    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

// 是否刷新
let isRefreshToken = false;
// 重试请求
let requests: any[] = [];

// 刷新token
const getRefreshToken = (refreshToken: string) => {
  return service.post("/sys/auth/token?refreshToken=" + refreshToken);
};

// 响应拦截器
service.interceptors.response.use(
  async (response: axios.AxiosResponse) => {
    // const userStore = useUserStore();

    const res = response.data;
    if (res.code !== "200") {
      ElMessage.error(res.message);
      return Promise.reject(new Error(response.statusText || "Error"));
    }

    if (Object.prototype.toString.call(res) === "[object Blob]") {
      return response;
    }

    // 响应成功
    if (res.code === "200") {
      return res;
    }

    // refreshToken失效，跳转到登录页
    if (res.code === "400") {
      return handleAuthorized();
    }

    // 错误提示
    ElMessage.error(res.message);

    return Promise.reject(new Error(res.message || "Error"));
  },
  error => {
    console.log(error);
    if (error.status === 400) {
      ElMessage.error(error.response.data.codeDescription + ": [" + error.response.data.message + "]");
      return Promise.reject(error.response.data);
    }
    if (error.status === 401) {
      return handleAuthorized();
    }
    ElMessage.error(error.message);
    return Promise.reject(error);
  }
);

const handleAuthorized = () => {
  ElMessageBox.confirm("登录超时，请重新登录", "提示", {
    showCancelButton: false,
    closeOnClickModal: false,
    showClose: false,
    confirmButtonText: "重新登录",
    type: "warning",
  }).then(() => {
    // const userStore = useUserStore();

    // userStore?.setToken("");
    // userStore?.setRefreshToken("");
    location.reload();

    return Promise.reject("登录超时，请重新登录");
  });
};

// 导出 axios 实例
export default service;
